package br.unirn.exemplos.servlet;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.Date;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import br.unirn.exemplos.dao.SeguidorDao;
import br.unirn.exemplos.dao.UsuarioDao;
import br.unirn.exemplos.dominio.Seguidor;
import br.unirn.exemplos.dominio.Usuario;

/**
 * Servlet implementation class UsuarioServlet
 */
@WebServlet("/UsuarioServlet")
public class UsuarioServlet extends HttpServlet {

	private static final long serialVersionUID = 1L;

	/**
	 * @see HttpServlet#HttpServlet()
	 */
	public UsuarioServlet() {
		super();
		// TODO Auto-generated constructor stub
	}

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doPost(request, response);
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		String operacao = request.getParameter("operacao");

		if (operacao == null)
			return;

		if (operacao.equals("cadastrar")) {
			UsuarioDao dao = new UsuarioDao();
			String login = request.getParameter("login");
			String senha = request.getParameter("senha");
			String nome = request.getParameter("nome");
			String descricaoPessoal = request.getParameter("descricaoPessoal");
			Usuario u = new Usuario();
			u.setLogin(login);
			u.setNome(nome);
			u.setDescricaoPessoal(descricaoPessoal);
			u.setSenha(String.valueOf(senha));
			u.setDataCadastro(new Date());
			dao.save(u);
			dao.close();
			usuarioCadastrado(response);

		} else if (operacao.equals("buscar")) {
			UsuarioDao dao = new UsuarioDao();
			SeguidorDao sDao = new SeguidorDao();
			try{
				String login = request.getParameter("login");
				String nome = request.getParameter("nome");
				Usuario u = new Usuario();
				u.setLogin(login);
				u.setNome(nome);

				List<Usuario> usuarios = (List<Usuario>) dao.findUsuarios(u);

				Usuario usuarioLogado = (Usuario) request.getSession().getAttribute("usuarioLogado");
				
				//atualiza lista de seguidores para os usu�rios logados
				if (usuarioLogado != null ){
					for (Usuario usuario : usuarios) {
						Seguidor seguidor = sDao.findBySeguidor(usuarioLogado, usuario);
						if (seguidor!= null ){
							usuario.setSeguindo(seguidor.isSeguindo());
						}else{
							usuario.setSeguindo(false);
						}
					}
				}
				request.getSession().setAttribute("usuariosBuscados", usuarios);
				request.getSession().setAttribute("loginBusca", login);
				request.getSession().setAttribute("nomeBusca", nome);

				request.getRequestDispatcher("/sistema/usuario/form_busca.jsp").forward(request,response);
			}
			finally{
				dao.close();
				sDao.close();
			}
		} 
	}

	/**
	 * 
	 * @param response
	 * @throws IOException
	 */
	private void usuarioCadastrado(HttpServletResponse response)
			throws IOException {

		PrintWriter resposta = response.getWriter();
		resposta.println("<HTML>");
		resposta.println("<BODY>");
		resposta.println("<H1>Usu�rio Cadastrado Com Sucesso!</H1>");
		resposta.println("</BODY>");
		resposta.println("</HTML>");
		resposta.close();

	}

}
